-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Detect missing derive
on unresolved attribute even when not imported
#142487
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
/// Add every proc macro accessible from the current crate to the `macro_map` so diagnostics can | ||
/// find them for suggestions. | ||
pub(crate) fn register_macros_for_all_crates(&mut self) { | ||
let def_ids = self.cstore().all_proc_macro_def_ids(); | ||
for def_id in def_ids { | ||
self.get_macro_by_def_id(def_id); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should memoize this, but the Resolver
doesn't use queries, so we should likely do that "manually" by adding a signal field to the Resolver
to skip this logic after the first call.
This comment has been minimized.
This comment has been minimized.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
r? compiler |
This comment has been minimized.
This comment has been minimized.
☔ The latest upstream changes (presumably #143731) made this pull request unmergeable. Please resolve the merge conflicts. |
``` error: cannot find attribute `sede` in this scope --> $DIR/missing-derive-3.rs:20:7 | LL | #[sede(untagged)] | ^^^^ | help: the derive macros `Deserialize` and `Serialize` accept the similarly named `serde` attribute | LL | #[serde(untagged)] | + error: cannot find attribute `serde` in this scope --> $DIR/missing-derive-3.rs:14:7 | LL | #[serde(untagged)] | ^^^^^ | note: `serde` is imported here, but it is a crate, not an attribute --> $DIR/missing-derive-3.rs:4:1 | LL | extern crate serde; | ^^^^^^^^^^^^^^^^^^^ help: `serde` is an attribute that can be used by the derive macros `Deserialize` and `Serialize`, you might be missing a `derive` attribute | LL + #[derive(Deserialize, Serialize)] LL | enum B { | ```
When encountering unresolved attributes, ensure the proc-macros for every crate in scope are added to the
macro_map
so that typos and missingderive
s are properly detected.Follow up to #134841.